package com.jtny.nytb.equipment.service;


import com.jtny.component.entity.PageData;
import com.jtny.nytb.equipment.dto.dataparam.DataParamTempDTO;
import com.jtny.nytb.equipment.vo.dataparam.*;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 智慧能源中心 - 伍天宇
 * @package com.jtny.nytb.equipment.service
 * @fileName DataParamService.java
 * @createTime 2023年09月19日 14:31
 * @Copyright© 2023 jtny
 * 江投能源技术研究院 版权所有
 */
public interface DataParamTempService {

    /**
     * 分页查询 设备参量临时数据
     *
     * @param dataParamTempPageQueryParamVO 设备数据参数临时页面查询参数 DTO
     * @return {@link PageData}<{@link DataParamPageVO}>
     */
    @GetMapping("page")
    PageData<DataParamPageVO> page(@SpringQueryMap DataParamTempPageQueryParamVO dataParamTempPageQueryParamVO);

    /**
     * 保存 设备参量临时数据
     *
     * @param dataParamTempVO Data param temp dto
     * @return {@link Boolean}
     */
    @PostMapping("save")
    Boolean save(@RequestBody DataParamTempVO dataParamTempVO);

    /**
     * 保存设备参量临时数据
     *
     * @param dataParamTempVOList 设备参量临时数据
     */
    @PostMapping("saveBatchDataParamTemp")
    void saveBatchDataParamTemp(@RequestBody List<DataParamTempVO> dataParamTempVOList);

    /**
     * 更新 设备参量临时数据
     *
     * @param dataParamTempVO Data param temp dto
     * @return {@link Boolean}
     */
    @PutMapping("update")
    Boolean update(@RequestBody DataParamTempVO dataParamTempVO);

    /**
     * 根据id查询 设备参量临时数据
     *
     * @param id 设备参量临时数据id
     * @return {@link DataParamTempVO}
     */
    @GetMapping("{id}")
    DataParamTempVO getById(@PathVariable(value = "id") Long id);

    /**
     * 根据name查询 设备参量临时数据
     *
     * @param name 设备参量临时数据name
     * @return {@link DataParamTempVO}
     */
    @GetMapping("getDataParamTempByName")
    DataParamTempVO getDataParamTempByName(@SpringQueryMap String name);

    /**
     * 删除 设备参量临时数据
     *
     * @param id 设备参量临时数据id
     * @return {@link Boolean}
     */
    @DeleteMapping("delete/{id}")
    Boolean delete(@PathVariable(value = "id") Long id);

    /**
     * 按规则字典 ID 移动数据参量
     *
     * @param ruleDictIds 规则字典 ID
     * @param modelId     设备模型 ID
     */
    @GetMapping("moveDataParamTempByRuleDictIds/{modelId}/{ruleDictIds}")
    void moveDataParamTempByRuleDictIds(@PathVariable(value = "modelId") Long modelId,
                                        @PathVariable(value = "ruleDictIds") List<String> ruleDictIds);

    /**
     * 按规则字典 ID 移动数据参量
     *
     * @param modelId 型号编号
     */
    @DeleteMapping("backDataParamTemp/{modelId}")
    void backDataParamTemp(@PathVariable(value = "modelId") Long modelId);

    /**
     * 获取设备参量列表 按规则字典 ID
     *
     * @param ruleDictIds 规则字典 IDS
     * @return {@link List}<{@link DataParamTempVO}>
     */
    @PostMapping("listByRuleDictIds/{type}")
    List<DataParamTempVO> listByRuleDictIds(@PathVariable(value = "type") String type,@RequestBody List<String> ruleDictIds);

    /**
     * 获取设备参量列表 按设备模型 ID
     *
     * @param modelId 型号编号
     * @return {@link List}<{@link DataParamTempVO}>
     */
    @GetMapping("listByModelId/{modelId}")
    List<DataParamTempVO> listByModelId(@PathVariable(value = "modelId") Long modelId);

    /**
     * 导入设备参量临时数据
     *
     * @param dataParamExcelList Data param Excel DTOS
     */
    @PostMapping("importDataParamBase")
    void importDataParamBase(@RequestBody List<DataParamExcelVO> dataParamExcelList);

    /**
     * 导入设备参量临时数据 频率
     *
     * @param frequencyExcelDTOList Data param Excel DTOS
     */
    @PostMapping("importFrequencyExcel")
    void importFrequencyExcel(@RequestBody List<FrequencyExcelDTO> frequencyExcelDTOList);

    /**
     * 导入设备参量临时数据 算法
     *
     * @param algorithmExcelVOList Data param Excel DTOS
     */
    @PostMapping("importAlgorithmExcel")
    void importAlgorithmExcel(@RequestBody List<AlgorithmExcelVO> algorithmExcelVOList);

    /**
     * 导入设备参量临时数据 算法参数
     *
     * @param algorithmParamExcelVOList Data param Excel DTOS
     */
    @PostMapping("importAlgorithmParamExcel")
    void importAlgorithmParamExcel(@RequestBody List<AlgorithmParamExcelVO> algorithmParamExcelVOList);

    /**
     * 导入标签 Excel
     *
     * @param labelVOList labelVOList
     */
    @PostMapping("importLabelExcel")
    void importLabelExcel(@RequestBody List<LabelVO> labelVOList);

    /**
     * 导入告警 Excel
     *
     * @param alarmExcelDTOList alarm Excel dtolist
     *
     */
    @PostMapping("importAlarmExcel")
    void importAlarmExcel(@RequestBody List<AlarmVO> alarmExcelDTOList);

    void importDataParamDTO(String tenantId, List<DataParamTempDTO> dataParamDTOList);
}
